"""
这个文件中定义 构成文法的四元组 包括：
变量：V variable 也可成为 语法变量/非终极符号  一般对应句子中的语法成分 类似：主语 谓语 宾语等
终极符：T terminal 是语言最终的句子中出现的符号
产生式：P production A->B
开始符号：S start symbol
"""

# class Variable:
#
#     def __init__(self, variable_name):
#         self.property = 'Variable'
#         self.name = variable_name
#
# class Terminal:
#
#     def __init__(self, terminal_name):
#         self.property =
#         self.name = terminal_name
from typing import List


# class Symbol:
#
#     def __init__(self, name, property_grammar):
#         assert (str(name).isalnum() == True)
#         if property_grammar == 'Variable' or property_grammar == 'Start_symbol':
#             assert (name[0].isupper() == True)
#         if property_grammar == 'Terminal':
#             assert (name[0].islower() == True)
#
#         self.property_grammar = property_grammar
#         self.name = name
#
#     def __hash__(self):
#         return str(self.name).__hash__()
#
#     # def __eq__(self, other):
#     #     return
#
#
# class Production:
#     """
#     产生式左边 只能是一个符号
#     但是右边 可以有很多个序列
#     """
#
#     def __init__(self, left, right: List):
#         self.left = left
#         self.rights = [right]
#
#     def add_right(self, right):
#         self.rights.append(right)
#
#     def show(self):
#         content = [self.left.name, '->']
#
#         for right in self.rights:
#             content += [sy.name for sy in right]
#         print(content, '\n')

"""
这样子像java一样 使用很多类 来从底层构建 就会像java一样需要自己封装很多方法 就没有发挥python 简洁的优势
所以使用以下的定义
（符号名称，名称，下标，属性）
语法变量：所有字母大写，终极符号：所有字母小写
使用dict来存储 产生式 左边是key 对应右边多个式子 
"""